package cpsobras.web;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import cpsobras.movimento.Movimento;
import cpsobras.movimento.MovimentoRN;

@ManagedBean(name="movimentoBean")
@SessionScoped
public class MovimentoBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private Movimento movimento = new Movimento();
	private List<Movimento> lista;
	private List<Movimento> pesquisarMovimento;
	private Integer obraSeleciona;
	private Date dataInicial;
	private Date dataFinal;
	
	public MovimentoBean(){
		dataInicial = new Date(System.currentTimeMillis());
		dataFinal = new Date(System.currentTimeMillis());
	}
	
	public String novo(){
		this.movimento = new Movimento();
		this.movimento.setIde_movime("S");
		this.movimento.setDat_movime(new Date(System.currentTimeMillis()));
		return "movimento";
	}

	public String Novo_item(){
		return "movimento_item";
	}

	public String pesquisar(){
		return "listar_movimento";
	}
	
	public Date dataAtual(){
		return new Date(System.currentTimeMillis());
	}

	public String salvar(){
		MovimentoRN movimentoRN = new MovimentoRN();
		movimentoRN.salvar(this.movimento);
		
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage facesMessage = new FacesMessage("Cadastrado/Alterado com sucesso!");
		context.addMessage(null, facesMessage);

		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("movimentoBean");
		this.movimento = null;
		return null;
	}
	
	public String excluir(){
		MovimentoRN movimentoRN = new MovimentoRN();
		movimentoRN.excluir(this.movimento);
		this.lista = null;
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("movimentoBean");
		return "listar_movimento";
	}
			
	public String alterar(){
		return "movimento";
	}

	public String voltar(){
		return "listar_movimento";
	}
	
	public List<Movimento> getLista() {
		if(obraSeleciona != null && dataInicial != null && dataFinal != null){
			MovimentoRN movimentoRN = new MovimentoRN();
			this.lista = movimentoRN.listar(obraSeleciona, dataInicial, dataFinal);
		}
		return this.lista;
	}
	
	public Double getValorTotalDocumentos(){
		Double total = 0.00;
		
		if(this.lista != null){
			for(int i=0; i<this.lista.size(); i++){
				total += lista.get(i).getVal_total_docume();
			}
		}
		return total; 
	}
	
	public Double getTotalReceitaObra(){
		Double total = 0.00;
		if(this.lista != null){
			MovimentoRN movimentoRN = new MovimentoRN();
			for(int i=0; i<lista.size();i++){
				this.movimento =  movimentoRN.carregar(this.lista.get(i).getCod_movime());
				
				total = this.movimento.getObra().getVal_total_obra();
			}
		}
		return total;
	}
	
	public Double getTotalReceita(){
		return getTotalReceitaObra() - getValorTotalDocumentos();
	}

	public Movimento getMovimento() {
		return movimento;
	}
	public void setMovimento(Movimento movimento) {
		this.movimento = movimento;
	}

	public List<Movimento> getPesquisarMovimento() {
		return pesquisarMovimento;
	}

	public void setPesquisarMovimento(List<Movimento> pesquisarMovimento) {
		this.pesquisarMovimento = pesquisarMovimento;
	}

	public Date getDataInicial() {
		return dataInicial;
	}

	public void setDataInicial(Date dataInicial) {
		this.dataInicial = dataInicial;
	}

	public Date getDataFinal() {
		return dataFinal;
	}

	public void setDataFinal(Date dataFinal) {
		this.dataFinal = dataFinal;
	}

	public void setLista(List<Movimento> lista) {
		this.lista = lista;
	}

	public Integer getObraSeleciona() {
		return obraSeleciona;
	}

	public void setObraSeleciona(Integer obraSeleciona) {
		this.obraSeleciona = obraSeleciona;
	}

}